#!/usr/bin/env node

/**
 * 百度贴吧树洞分析工具 - 主入口
 * @description 提供简单的命令行接口和快速启动功能
 */

const EnhancedOPCrawler = require('./src/enhancedOPCrawler');
const fs = require('fs-extra');

/**
 * 显示使用帮助
 */
function showHelp() {
  console.log(`
🚀 百度贴吧树洞分析工具

使用方法:
  node index.js <帖子URL> [选项]
  npm start <帖子URL> [选项]

选项:
  --pages <数量>       最大爬取页数 (默认: 100)
  --delay <毫秒>       延迟时间 (默认: 3000)
  --output <名称>      输出文件名标识
  --cookies <文件>     cookies文件路径 (默认: cookies.txt)
  --help              显示此帮助信息

示例:
  # 基础爬取
  node index.js "https://tieba.baidu.com/p/5868510485"
  
  # 自定义参数
  node index.js "https://tieba.baidu.com/p/5868510485" --pages 200 --delay 5000
  
  # 使用npm
  npm start "https://tieba.baidu.com/p/5868510485"

快速示例:
  node examples/basic_usage.js        # 运行基础示例
  node examples/basic_usage.js --batch # 运行批量示例

更多信息请查看 README.md
  `);
}

/**
 * 解析命令行参数
 */
function parseArgs() {
  const args = process.argv.slice(2);
  
  if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
    showHelp();
    process.exit(0);
  }
  
  const config = {
    url: args[0],
    maxPages: 100,
    delay: 3000,
    output: 'default',
    cookies: 'cookies.txt'
  };
  
  for (let i = 1; i < args.length; i++) {
    switch (args[i]) {
      case '--pages':
        config.maxPages = parseInt(args[++i]) || config.maxPages;
        break;
      case '--delay':
        config.delay = parseInt(args[++i]) || config.delay;
        break;
      case '--output':
        config.output = args[++i] || config.output;
        break;
      case '--cookies':
        config.cookies = args[++i] || config.cookies;
        break;
    }
  }
  
  return config;
}

/**
 * 主程序
 */
async function main() {
  try {
    console.log('🚀 启动百度贴吧树洞分析工具...\n');
    
    const config = parseArgs();
    
    // 验证URL
    if (!config.url || !config.url.includes('tieba.baidu.com/p/')) {
      console.error('❌ 错误：请提供有效的贴吧帖子URL');
      console.log('   格式：https://tieba.baidu.com/p/帖子ID');
      process.exit(1);
    }
    
    // 读取cookies
    let cookies = '';
    if (await fs.pathExists(config.cookies)) {
      cookies = await fs.readFile(config.cookies, 'utf8');
      console.log(`🍪 已加载cookies: ${config.cookies}`);
    } else {
      console.log('⚠️  未找到cookies文件，将使用匿名访问');
      console.log('   提示：创建cookies.txt文件可提高爬取成功率');
    }
    
    // 创建爬取器
    const crawler = new EnhancedOPCrawler({
      maxPages: config.maxPages,
      delay: config.delay,
      cookies: cookies.trim()
    });
    
    // 显示配置信息
    console.log('📋 爬取配置:');
    console.log(`   ├─ 目标URL: ${config.url}`);
    console.log(`   ├─ 最大页数: ${config.maxPages}页`);
    console.log(`   ├─ 延迟时间: ${config.delay}毫秒`);
    console.log(`   ├─ 输出标识: ${config.output}`);
    console.log(`   └─ Cookies: ${cookies ? '已加载' : '未使用'}\n`);
    
    // 开始爬取
    console.log('🎯 开始爬取楼主发言...\n');
    const startTime = Date.now();
    
    const result = await crawler.crawlCompleteOP(config.url, config.output);
    
    const duration = Math.round((Date.now() - startTime) / 1000);
    
    // 显示结果
    console.log('\n🎉 爬取完成！');
    console.log('📊 结果统计:');
    console.log(`   ├─ 帖子标题: ${result.postInfo.title}`);
    console.log(`   ├─ 楼主昵称: ${result.postInfo.opName}`);
    console.log(`   ├─ 楼主发言: ${result.totalPosts}楼`);
    console.log(`   ├─ 总字数: ${result.totalWords}字`);
    console.log(`   ├─ 平均字数: ${Math.round(result.totalWords / result.totalPosts)}字/楼`);
    console.log(`   ├─ 保存文件: ${result.savedFiles.length}个`);
    console.log(`   └─ 总耗时: ${Math.floor(duration/60)}分${duration%60}秒`);
    
    console.log('\n💾 已保存文件:');
    result.savedFiles.forEach(file => {
      console.log(`   📄 ${file}`);
    });
    
    console.log('\n✨ 数据已准备就绪，可用于后续分析！');
    
  } catch (error) {
    console.error('\n❌ 爬取失败:', error.message);
    
    if (error.message.includes('403')) {
      console.log('\n💡 403错误解决建议:');
      console.log('   1. 确保cookies.txt文件存在且有效');
      console.log('   2. 增加延迟时间: --delay 5000');
      console.log('   3. 减少页数限制: --pages 50');
    } else if (error.message.includes('timeout')) {
      console.log('\n💡 超时错误解决建议:');
      console.log('   1. 检查网络连接');
      console.log('   2. 增加延迟时间');
      console.log('   3. 稍后重试');
    }
    
    process.exit(1);
  }
}

// 运行主程序
if (require.main === module) {
  main().catch(console.error);
}

module.exports = { main, parseArgs, showHelp }; 